#include<iostream>
using namespace std;
int map[20][20];
int zt[10][20][20];
int dep=0;
struct node{
    int x;
    int y;
    int o;
};
node ans[10][10];
bool check(){
    for(int i=1;i<=7;i++){
        for(int j=1;j<=5;j++){
            if(map[i][j])return 0;
        }
    }
    return 1;
}
int bj[20][20];
void cl(){
     for(int j=1;j<=5;j++)
    {
            for(int i=2;i<=7;i++){
            if(map[i][j]){
                int k=i;
                while(k>1&&!map[k-1][j]){
                    k--;
                }
                if(k!=i)
               {
                 swap(map[k][j],map[i][j]);
               }
            }
        }
    }
       int flag=1;
    do{
        flag=1;
        for(int i=1;i<=7;i++)
        for(int j=1;j<=5;j++)bj[i][j]=0;
    for(int i=1;i<=7;i++){
        for(int j=1;j<=5;j++){
            if(map[i][j]){
                int bj1=0;
                for(int k=1;k<=2;k++){
                    if(j+k<=5){
                        if(map[i][j]!=map[i][j+k]){
                            bj1=1;
                            break;
                        }
                    }
                    else {
                        bj1=1;
                        break;
                    }
                }
                if(!bj1){
                    bj[i][j]=1;
                    bj[i][j+1]=1;
                    bj[i][j+2]=1;
                flag=0;}
                bj1=0;
                 for(int k=1;k<=2;k++){
                    if(i+k<=7){
                        if(map[i][j]!=map[i+k][j]){
                            bj1=1;
                            break;
                        }
                    }
                    else {
                        bj1=1;
                    }
                }
                if(!bj1){
                bj[i][j]=1;
                bj[i+1][j]=1;
                bj[i+2][j]=1;
                flag=0;
                }
            }
        }
    }
     for(int i=1;i<=7;i++){
        for(int j=1;j<=5;j++){  
          if(bj[i][j]){
            map[i][j]=0;
          }
        }
}
if(!flag){
    for(int j=1;j<=5;j++)
    {
            for(int i=2;i<=7;i++){
            if(map[i][j]){
                int k=i;
                while(k>1&&!map[k-1][j]){
                    k--;
                }
                if(k!=i)
               {
                 swap(map[k][j],map[i][j]);
               }
            }
        }
    }
}
    }while(!flag);
}
int bjj=0;
void dfs(int g){
    if(bjj)return;
    if(g==dep){
        if(check()){
           bjj=1;
        }
        return;
    }
      for(int j=1;j<=5;j++){
        for(int i=1;i<=7;i++){
            if(map[i][j]){
                for(int k=1;k<=7;k++){
                for(int l=1;l<=5;l++){
                    zt[g][k][l]=map[k][l];
                }}//备份
    if(j+1<=5&&!bjj){
                if(map[i][j+1]){
                    swap(map[i][j],map[i][j+1]);
                }
                else {
                    int k=i;
                    while(!map[k-1][j+1]&&k>1){
                        k--;
                    }
                    swap(map[i][j],map[k][j+1]);
                }
                cl();
                node nx;
                nx.x=j;
                nx.y=i;
                nx.o=1;
                ans[dep][g+1]=nx;
                dfs(g+1);
                for(int k=1;k<=7;k++){
                for(int l=1;l<=5;l++){
                    map[k][l]=zt[g][k][l];
                }
            }
    }
   if(j-1>=1&&!bjj){
            if(map[i][j-1]){
                    swap(map[i][j],map[i][j-1]);
                }
                else {
                    int k=i;
                    while(!map[k-1][j-1]&&k>1){
                      k--;
                    }
                    swap(map[i][j],map[k][j-1]);
                }
                cl();
                node nx;
                nx.x=j;
                nx.y=i;
                nx.o=-1;
                ans[dep][g+1]=nx;
                dfs(g+1);
                for(int k=1;k<=7;k++){
                for(int l=1;l<=5;l++){
                    map[k][l]=zt[g][k][l];
                }//备份
            }
    }
            }
        }
    }
}
int main(){
    int n;
    cin>>n;
    for(int i=1;i<=5;i++){
        int x=-1;
        int zb=1;
        while(x!=0){
            cin>>x;
            if(x){
            map[zb++][i]=x;
            }
        }
    }
    // for(int i=7;i>=1;i--)
    // {
    //     for(int j=1;j<=5;j++){
    //     cout<<map[i][j]<<" ";
    // }
    // cout<<endl;
    // }
    int bansy[10];
    for(dep=0;dep<=n;dep++){
        bjj=0;
        dfs(0);
       bansy[dep]=bjj;
    }
    for(int i=1;i<=2;i++)cout<<ans[2][i].x-1<<" "<<ans[2][i].y-1<<" "<<ans[2][i].o<<endl;
    int j=1;
    int cnt=0;
    node anss[10][10];
    int sl[10];
    for(int i=1;i<=n;i++){
        if(bansy[i]){
            ++cnt;
            for(int j=1;j<=i;j++){
                anss[cnt][j]=ans[i][j];
                sl[cnt]=i;
            }
        }
    }
    if(cnt){
        for(int i=1;i<cnt;i++){
            for(int j=1;j<=sl[i];j++){
                if(anss[i][j].x<anss[i+1][j].x){
                    swap(anss[i],anss[i+1]);
                    swap(sl[i],sl[i+1]);
                    break;
                }
                if(anss[i][j].y<anss[i+1][j].y){
                    swap(anss[i],anss[i+1]);
                     swap(sl[i],sl[i+1]);
                    break;
                }
                 if(anss[i][j].o>anss[i+1][j].o){
                    swap(anss[i],anss[i+1]);
                     swap(sl[i],sl[i+1]);
                    break;
                }
            }
        }
        for(int i=1;i<=sl[cnt];i++){
            cout<<anss[cnt][i].x-1<<" "<<anss[cnt][i].y-1<<" "<<anss[cnt][i].o<<endl;
        }
    }
    else cout<<-1;
    return 0;
}